home *** CD-ROM | disk | FTP | other *** search
/ The Games Machine 76 / XENIATGM66.iso / Indiana Jones / Indiana Jones.exe / RESOURCE / PREVIEW.GOB / cog_actor_robotguard.cog < prev    next >
Text File  |  1999-11-15  |  6KB  |  243 lines

  1. # Jones 3D Cog Script
  2. #
  3. # actor_RobotSm.cog
  4. #
  5. # Special case behavior for the Guard (door) Robot
  6. #
  7. # [MDR] 
  8. #
  9. # (C) 1999 LucasArts Entertainment Co. All Rights Reserved
  10. # ========================================================================================
  11.  
  12. symbols
  13.  
  14.     message        startup
  15.     message        created
  16.     message        user0
  17.     message        aievent
  18.     message        damaged
  19.     message        killed
  20.     message        timer
  21.  
  22. # *********************** SUBROUTINES **************************
  23.     flex        RobotTakeOff                local
  24.     flex        RobotLand                    local
  25.  
  26. # ************************** TEMPLATES *************************
  27.     template    tpl_glow=+robotglow_md        local
  28.  
  29. # *********************** MISC LOCAL VARS **********************
  30.     thing        t_sender                    local
  31.     thing        t_glow                        local
  32.  
  33.     int            eventType                    local
  34.     flex        f_userData                    local
  35.     int            n_damageType                local
  36.  
  37.     int            TIMERID_POWERUP=1            local
  38.  
  39.     int            FLAG_ACTIVATED                local
  40.     int            FLAG_POWERINGUP                local
  41.  
  42.     vector        vec_pos                        local
  43.  
  44. end
  45.  
  46. # ========================================================================================
  47. code
  48.  
  49. # ........................................................................................
  50. startup:
  51.  
  52.     FLAG_ACTIVATED    = 0x20;
  53.     FLAG_POWERINGUP    = 0x40;
  54.  
  55.     return;
  56.  
  57.  
  58. # ........................................................................................
  59. created:
  60.  
  61.     t_sender = GetSenderRef();
  62.  
  63.     SetArmedMode(t_sender, 7);                            # Switch to non-active armed mode
  64.     ClearPhysicsFlags(t_sender, 0x2000);                # Clear PF_FLY
  65.     SetPhysicsFlags(t_sender, 0x0001);                    # Set PF_USEGRAVITY
  66.  
  67.     AISetCutsceneMode(t_sender);                        # Disable AI until USER0 activated.
  68.     SetActorFlags(t_sender, 0x00100008);                # Set AF_INVULNERABLE and AF_NOTARGET
  69.     SetActorFlags(t_sender, 0x40000);                    # Set AF_IMMOBILE
  70.  
  71.     AISetMode(t_sender, 0x8000000);                        # Set MODE_ARMOREDSKIN
  72.     AISetMode(t_sender, 0x10000);                        # Set MODE_WANTALLEVENTS
  73.     AISetMode(t_sender, 0x2000000);                        # Set MODE_NOCHASING
  74.  
  75.     SetThingUserData(t_sender, 0);
  76.  
  77.     return;
  78.  
  79.  
  80. # ........................................................................................
  81. user0:
  82.  
  83.     t_sender    = GetParam(0);
  84.     f_userData    = GetThingUserData(t_sender);
  85.  
  86.     if ( !BITTEST(f_userData, FLAG_ACTIVATED) )
  87.     {
  88.         f_userData = BITSET(f_userData, FLAG_ACTIVATED);            # Set "activated" flag
  89.         f_userData = BITSET(f_userData, FLAG_POWERINGUP);            # Set "powering up" flag
  90.         SetThingUserData(t_sender, f_userData);                        # Record flag settings
  91.  
  92.         ClearActorFlags(t_sender, 0x00100008);                        # Clear AF_INVULNERABLE and AF_NOTARGET
  93.         ClearActorFlags(t_sender, 0x40000);                            # Clear AF_IMMOBILE
  94.  
  95.         ClearPhysicsFlags(t_sender, 0x0001);                        # Clear PF_USEGRAVITY
  96.  
  97.         vec_pos = VectorTransformToOrient(t_sender, '0.0 0.15 0');
  98.         AISetMovePos(t_sender, VectorAdd(GetThingPos(t_sender), vec_pos), 0);
  99.         SetTimerEx(1.0, TIMERID_POWERUP, t_sender, 0);
  100.     }
  101.  
  102.     return;
  103.  
  104.  
  105. # ........................................................................................
  106. timer:
  107.  
  108.     if ( GetSenderID() == TIMERID_POWERUP )
  109.     {
  110.         t_sender    = GetParam(0);
  111.  
  112.         f_userData    = GetThingUserData(t_sender);
  113.         f_userData = BITCLEAR(f_userData, FLAG_POWERINGUP);            # Clear "powering up" flag
  114.         SetThingUserData(t_sender, f_userData);                        # Record flag settings
  115.  
  116.         call RobotTakeOff;
  117.  
  118.         AIClearCutsceneMode(t_sender);                                # Enable AI's instincts
  119.         AISetLookThing(t_sender, GetLocalPlayerThing());
  120.     }
  121.  
  122.     return;
  123.  
  124.  
  125. # ........................................................................................
  126. aievent:
  127.  
  128.     eventType    = GetParam(0);
  129.     t_sender    = GetSenderRef();
  130.     f_userData    = GetThingUserData(t_sender);
  131.  
  132.     if ( BITTEST(eventType, 0x100e04) )                    #---- EVENT_HIT(Something)
  133.     {
  134.         if ( BITTEST(f_userData, FLAG_POWERINGUP) )            # If powering up, ignore it
  135.         {
  136.             ReturnEx(1);
  137.             return;
  138.         }
  139.     }
  140.  
  141.     if ( BITTEST(f_userData, FLAG_POWERINGUP) )            # If powering up, not "in play" yet
  142.         return;
  143.  
  144.     if ( eventType == 0x40 )                            #---- EVENT_MOVETARGETCHANGED
  145.     {
  146.         if ( AIGetArmedMode(t_sender) == 7 )                # Non-active armed mode?
  147.         {
  148.             call RobotTakeOff;
  149.         }
  150.     }
  151.  
  152.     if ( BITTEST(eventType, 0x80800 ) )                    #---- EVENT_GOAL(UNREACHABLE|REACHED)
  153.     {
  154.         if ( !BITTEST(AIGetMode(t_sender), 0x202) )
  155.         {
  156.             call RobotLand;
  157.         }
  158.     }
  159.  
  160.     SetThingUserData(t_sender, f_userData);                    # Record flag settings
  161.  
  162.     return;
  163.  
  164.  
  165. # ........................................................................................
  166. damaged:
  167.  
  168.     n_damageType    = GetParam(1);
  169.  
  170.     if ( BITTEST(n_damageType, 0x18) )                        # DAMAGE_(FISTS|WHIP)?
  171.     {
  172.         ReturnEx(0);
  173.     }
  174.  
  175.     return;
  176.  
  177.  
  178. # ........................................................................................
  179. killed:
  180.  
  181.     t_sender    = GetSenderRef();
  182.  
  183.     t_glow = GetThingAttachedThing(t_sender, 13);
  184.     if ( t_glow > -1 )
  185.     {
  186.         DestroyThing(t_glow);
  187.     }
  188.  
  189.     return;
  190.  
  191.  
  192. # ===================================================================
  193. #    Subroutines
  194. # ===================================================================
  195.  
  196. # ........................................................................................
  197. # Assumes t_sender and f_userData have been set
  198. # ........................................................................................
  199. RobotTakeOff:
  200.  
  201.     SetArmedMode(t_sender, 0);                        # Switch to active armed mode
  202.  
  203.     PlaySoundClass(t_sender, 131);                    # Play activated sound
  204.     PlaySoundClass(t_sender, 123);                    # Play hover sound
  205.  
  206.     SetPhysicsFlags(t_sender, 0x2000);                # Set PF_FLY
  207.     ClearPhysicsFlags(t_sender, 0x0001);            # Clear PF_USEGRAVITY
  208.  
  209.     vec_pos    = VectorAdd( GetThingPos(t_sender), '0 0 -0.10' );
  210.     t_glow    = CreateThingAtPos(tpl_glow, FindNewSectorFromThing(t_sender, vec_pos), vec_pos, '0 0 0');
  211.     if ( t_glow > -1 )
  212.     {
  213.         AttachThingToThingEx(t_glow, t_sender, 0x08);
  214.     }
  215.  
  216.     return;
  217.  
  218. # ........................................................................................
  219. # Assumes t_sender and f_userData have been set
  220. # ........................................................................................
  221. RobotLand:
  222.  
  223.     ResetThing(t_sender);
  224.     SetArmedMode(t_sender, 7);                        # Switch to non-active armed mode
  225.  
  226.     StopSoundClass(t_sender, 123);                    # Stop hover sound
  227.  
  228.     ClearPhysicsFlags(t_sender, 0x2000);            # Clear PF_FLY
  229.     SetPhysicsFlags(t_sender, 0x0001);                # Set PF_USEGRAVITY
  230.  
  231.     t_glow = GetThingAttachedThing(t_sender, 13);
  232.     if ( t_glow > -1 )
  233.     {
  234.         DestroyThing(t_glow);
  235.     }
  236.  
  237.     return;
  238.  
  239.  
  240. end
  241.  
  242.  
  243.